Computer application programs, as they are being developed and tested, often suffer from malfunctions known as bugs. A bug in an application program may cause the application to behave incorrectly or to stop responding altogether. The efficiency of resolving the bug is improved if the bug can be reproduced. Reproducing the bug requires that the user know the sequence of user-driven events that occurred leading up to the occurrence of the bug. Sometimes, a bug results from the culmination of many events happening in a particular sequence and can be nearly impossible to remember.
Furthermore, the person experiencing the bug may not be the same individual who will attempt to debug the application. Therefore, the person experiencing the bug must be able to convey the sequence of events to the person who will attempt to debug the application. Conveying the sequence of events requires not only that the person experiencing the bug recall each of the events, but each event must be conveyed accurately. If the person forgets a particular user-driven event, forgets the particular order of events, or misunderstands a user-driven event that occurred when experiencing the bug, then the user-driven events will not be adequately reproducible. As a result, the bug may not be easily detected and corrected. Thus, automatically recording the user- driven events of an application is necessary to properly reproduce the bug.
However, for applications that operate within a graphical user interface (“GUI”), many of the user-driven events occur through use of a mouse in addition to use of a keyboard. User-driven events include mouse clicks on particular objects of the GUI. Merely recording the X and Y coordinates of a mouse pointer when the click occurs is not helpful because one cannot determine from the X and Y coordinates the object that was actually clicked due to variations in window size, placement, object arrangement, and other factors. Therefore, user-driven events within GUIs are not adequately recorded.